클로드 코드 완벽 가이드 — 20장 테스트 작성하기 딥다이브 학습 노트
출처: 클로드 코드 완벽 가이드 (코드팩토리 최지호) | 참고: https://github.com/codefactory-co
20장에서 다루는 내용
- 테스트의 필요성 — 왜 자동화된 테스트가 수동 테스트보다 효율적인지
- 테스트 코드 계획하기 — 클로드 코드와 대화하며 테스트 구조/계획 수립
- 유닛 테스트 작성 — 서브에이전트를 활용한 병렬 테스트 코드 작성
- E2E 테스트 계획 및 작성 — Playwright와 MCP를 활용한 통합 테스트
전체 흐름도
[테스트 코드 계획하기] [유닛 테스트 작성하기] [E2E 테스트 작성하기]
| | |
v v v
+------------------------+ +---------------------------+ +---------------------------+
| 01 테스트 구조 구상 | | 01 서브에이전트 분담 계획 | | 01 Playwright 구조 구상 |
| - __tests__/ 폴더 설계 | | - Agent 1: 핵심 로직 | | - tests/ 폴더 설계 |
| - lib/ components/ | | - Agent 2: React 컴포넌트 | | - auth/ cities/ core/ |
| hooks/ __mocks__/ | | - Agent 3: Hooks & Auth | | fixtures/ page-objects/ |
| | | - Agent 4: 인프라 | | utils/ |
| 02 테스트 계획 작성 | | | | |
| - 우선순위별 분류 | | 02 병렬 실행 | | 02 Playwright 세팅 |
| - HIGH/MEDIUM/LOW | | - 3~4개 에이전트 동시 실행 | | - playwright.config.ts |
| - 기능별 시나리오 정리 | | - 65~70% 시간 단축 | | - package.json 스크립트 |
| | | | | |
| | | 03 테스트 실행/검증 | | 03 CLAUDE.md에 구조 등록 |
| | | - Jest 단위 테스트 실행 | | 04 Playwright MCP 등록 |
| | | - 95개 테스트 통과 | | 05 커스텀 커맨드 생성 |
| | | | | 06 테스트 실행/리포트 |
+------------------------+ +---------------------------+ +---------------------------+
선수 지식 체크리스트
- [ ] JavaScript/TypeScript 기본 문법
- [ ] React 컴포넌트 구조 (props, state, hooks)
- [ ] 클로드 코드 서브에이전트 개념 (병렬 처리)
- [ ] Node.js 패키지 관리 (npm, pnpm)
- [ ] 기본적인 테스트 용어 (유닛 테스트, E2E 테스트)
핵심 키워드
| 키워드 | 의미 |
|---|---|
| 유닛 테스트(Unit Test) | 가장 작은 단위의 비즈니스 로직을 독립적으로 검증하는 테스트 |
| E2E 테스트(End-to-End) | 사용자의 실제 상호작용부터 결과까지를 통합적으로 검증하는 테스트 |
| 통합 테스트(Integration Test) | 여러 유닛들의 통합이 올바르게 동작하는지 검증하는 테스트 |
| Jest | JavaScript/TypeScript 유닛 테스트 프레임워크. describe/test/expect 패턴 |
| Playwright | 마이크로소프트가 관리하는 E2E 테스트 라이브러리. 실제 브라우저에서 테스트 실행 |
| Mock(모킹) | 외부 의존성(DB, API, localStorage 등)을 가짜 객체로 대체하는 테스트 기법 |
| 서브에이전트(Sub-Agent) | 클로드 코드에서 특정 작업을 전문적으로 수행하도록 만든 독립형 AI 도우미 |
| Playwright MCP | Playwright를 클로드 코드의 MCP 서버로 등록하여 E2E 테스트를 자동화하는 도구 |
| Page Object Model | E2E 테스트에서 페이지별 요소와 동작을 클래스로 캡슐화하는 디자인 패턴 |
1. 테스트 코드를 왜 작성해야 하는가?
한 줄 요약
테스트 코드를 작성하지 않으면 프로젝트의 코드 품질을 보장할 수 없으며, 바이브 코딩 환경에서는 오히려 더 중요하다.
쉬운 설명 (비유)
비유: 건강 검진 vs 아플 때만 병원 가기
❌ 수동 테스트 = "만들어서 돌려보면 되지 뭐"
→ 시간이 많이 들고, 실수할 수 있음
→ 기능이 많아지면 일일이 확인하기 불가능
✅ 자동화된 테스트 = "정기 건강 검진"
→ 반복해서 빠르게 검증 가능
→ 새 코드가 기존 코드에 미치는 영향을 즉시 확인
→ 버그가 있는 코드를 자동으로 재확인
클로드 코드에서 테스트가 특히 중요한 이유
클로드 코드는 현재 콘텍스트 윈도우에서 변경한 내용이
기존 코드와 통합될 때 어떤 영향이 있을지 확인한다.
그리고 버그가 있을 수 있는 코드를 재확인한다.
→ 테스트 코드가 있으면 클로드 코드가 "자동으로" 품질을 검증한다!
실무 예제
# 수동 테스트 vs 자동 테스트 비교
수동 테스트 (매번 반복해야 함):
1. 브라우저 열기
2. 로그인하기
3. 좋아요 버튼 클릭
4. 새로고침 후 좋아요 유지 확인
5. 싫어요로 변경
6. 다시 새로고침...
→ 기능 하나 바꿀 때마다 이걸 반복? 😱
자동 테스트 (한 번 작성하면 끝):
$ npx jest
✅ 35개 테스트 모두 통과 (0.5초)
→ 코드 변경할 때마다 자동으로 검증!
핵심 체크포인트
- [ ] 수동 테스트의 한계(시간, 실수 가능성)를 이해했는가?
- [ ] 자동화된 테스트의 장점(반복성, 속도, 일관성)을 설명할 수 있는가?
- [ ] 클로드 코드가 테스트 코드를 활용하는 방식을 이해했는가?
2. 테스트 코드 계획하기
한 줄 요약
클로드 코드에게 처음부터 테스트 코드를 작성시키지 말고, 먼저 테스트 구조와 계획을 대화로 수립한 뒤 단계적으로 진행한다.
쉬운 설명 (비유)
비유: 요리하기 전에 레시피 먼저 짜기
❌ 바로 코딩: "테스트 코드 작성해줘"
→ 구조가 없으니 뒤죽박죽
✅ 계획 먼저: "테스트 구조를 구상해줘. 아직 작성하지는 말아줘."
→ 폴더 구조 → 테스트 목록 → 우선순위 → 그 다음에 코드 작성
단계 01: 테스트 구조 구상
클로드 코드에게 프로젝트 구조를 파악하고 유닛 테스트 코드를 작성할 구조를 구상해달라고 요청한다. 핵심: "아직 테스트 코드를 작성하지는 말아줘"
프롬프트 예시:
"현재 프로젝트 구조를 파악하고 유닛 테스트 코드를 작성할 구조를 구상해줘.
아직 테스트 코드를 작성하지는 말아줘."
클로드 코드가 제안하는 테스트 구조 예시:
__tests__/
├── lib/
│ ├── preferences.test.ts # 핵심 비즈니스 로직
│ ├── cities.test.ts # 필터링 로직
│ └── utils.test.ts # 유틸리티 함수
├── components/
│ ├── cities/
│ │ └── CityCard.test.tsx # 도시 카드 상호작용
│ └── home/
│ ├── HeroSection.test.tsx # 필터 UI
│ └── TopCities.test.tsx # 도시 목록 UI
├── hooks/
│ └── useLocalStorageMigration.test.ts
└── __mocks__/
├── supabase.ts # Supabase 모킹
├── next-router.ts # Next.js 라우터 Mock
└── localStorage.ts # localStorage 모킹
단계 02: 테스트 계획 작성
테스트 폴더 구조가 마음에 들면, 어떤 파일의 어떤 기능을 어떤 시나리오로 테스트할지 정리를 요청한다.
프롬프트 예시:
"작성해야 할 유닛 테스트를 전부 정리해줘. 아직 테스트 코드를 작성하지는 말아줘."
클로드 코드가 우선순위별로 분류하여 테스트 목록을 정리한다:
테스트 우선순위별 분류
HIGH PRIORITY - 핵심 비즈니스 로직
1. src/lib/preferences.ts - 사용자 선호도 관리
- toggleCityPreference() 함수
- 좋아요 추가 (null → like)
- 좋아요 취소 (like → null)
- 좋아요에서 싫어요로 변경 (like → dislike)
- 싫어요 추가 (null → dislike)
- 싫어요 취소 (dislike → null)
- 싫어요에서 좋아요로 변경 (dislike → like)
- Supabase 에러 시 localStorage fallback
- 네트워크 에러 시 localStorage fallback
...생략...
실무 예제
# 실제 대화 흐름 (4단계 전략)
1단계: "프로젝트 구조를 파악하고 테스트 코드 구조를 구상해줘. 아직 작성하지 마."
→ 폴더 구조 확인
2단계: "작성해야 할 유닛 테스트를 전부 정리해줘. 아직 코드 작성하지 마."
→ 테스트 목록 및 우선순위 확인
3단계: "지금까지의 계획을 기반으로 Subagent를 사용해서 Parallel하게
테스트 코드 작성 과정을 병행으로 진행할 수 있는지 계획을 보여줘."
→ 서브에이전트 분담 계획 확인
4단계: "계획을 기반으로 테스트 코드 작업을 진행해줘."
→ 실제 테스트 코드 작성
핵심 체크포인트
- [ ] 테스트 구조 구상 → 테스트 계획 → 코드 작성 순서를 이해했는가?
- [ ] "아직 작성하지 마"라는 제약 조건을 프롬프트에 넣는 이유를 설명할 수 있는가?
- [ ] 우선순위별(HIGH/MEDIUM/LOW) 테스트 분류를 할 수 있는가?
3. 유닛 테스트 작성하기 (서브에이전트 병렬 활용)
한 줄 요약
서브에이전트를 병렬로 실행하면 독립적인 유닛 테스트를 동시에 작성할 수 있어 65~70%의 시간을 절약할 수 있다.
쉬운 설명 (비유)
비유: 시험 채점
❌ 순차 개발 = 선생님 1명이 모든 과목 채점
→ 9~13시간 소요
✅ 병렬 개발 = 4명의 선생님이 각자 담당 과목 채점
→ 3~4시간 소요 (65~70% 시간 절약)
서브에이전트 역할 분담 계획
Agent 1: Core Logic Specialist (핵심 비즈니스 로직)
├── __tests__/lib/preferences.test.ts # 복잡도: HIGH
├── __tests__/lib/cities.test.ts # 복잡도: HIGH
└── __tests__/lib/fallback-data.test.ts # 복잡도: MEDIUM
→ 테스트 케이스: ~45개 | 예상 소요: 4~5시간
Agent 2: React Component Specialist (UI 컴포넌트)
├── __tests__/components/cities/CityCard.test.tsx # 복잡도: HIGH
├── __tests__/components/home/HeroSection.test.tsx # 복잡도: MEDIUM
└── __tests__/components/home/TopCities.test.tsx # 복잡도: MEDIUM
→ 테스트 케이스: ~28개 | 예상 소요: 3~4시간
Agent 3: Hooks & Auth Specialist (React Hooks, 인증)
├── __tests__/hooks/useLocalStorageMigration.test.tsx # 복잡도: MEDIUM
├── __tests__/components/auth/UserMenu.test.tsx # 복잡도: MEDIUM
└── __tests__/lib/utils.test.ts # 복잡도: LOW
→ 테스트 케이스: ~18개 | 예상 소요: 2~3시간
Agent 4: Infrastructure Specialist (테스트 환경/Mock)
├── __tests__/__mocks__/supabase.ts # Mock 시스템
├── __tests__/__mocks__/next-router.ts # 라우터 Mock
├── __tests__/__mocks__/localStorage.ts # localStorage Mock
├── __tests__/__mocks__/city-data.ts # 테스트 데이터
└── jest.config.js + jest.setup.js # 테스트 환경 설정
→ 예상 소요: 1~2시간
병렬 개발 성과
┌─────────────────────────────────────────────┐
│ 3개 Agent 동시 실행 결과 │
│ │
│ Agent 1 - Core Logic: 103개 테스트 (71% 통과) │
│ Agent 2 - React: CityCard 27/27 (100% 성공) │
│ Agent 3 - Hooks & Auth: 62개 테스트 (100%) │
│ │
│ 총 17개 테스트 파일, 238개 테스트 케이스 │
│ 핵심 기능 82% 성공률 검증 │
│ │
│ 순차 개발: 9~13시간 │
│ 병렬 개발: 3~4시간 │
│ 시간 절약: 5~9시간 (65~70% 단축) │
└─────────────────────────────────────────────┘
Jest 테스트 실행 결과 예시
테스트 실행 결과 요약
Jest 단위 테스트 ✅ 성공
95개 테스트 모두 통과 - 4개 테스트 스위트 실행 완료
테스트 범위:
1. 유틸리티 함수 (cn 함수) - 31개 테스트
- 클래스명 병합, 조건부 클래스, Tailwind 중복 제거 등
2. 폴백 데이터 관리 - 26개 테스트
- 레거시 데이터 변환, localStorage 통합, 성능 테스트
3. 사용자 선호도 시스템 - 35개 테스트
- 좋아요/싫어요 토글, DB/localStorage 폴백, 마이그레이션
4. 도시 필터링 로직 - 31개 테스트
- 지역/예산/환경/계절 필터링, 복합 필터링
실무 예제
// Jest 유닛 테스트 예시 - 사용자 선호도 토글
describe('toggleCityPreference', () => {
test('좋아요 추가 (null → like)', () => {
const result = toggleCityPreference(null, 'like');
expect(result).toBe('like');
});
test('좋아요 취소 (like → null)', () => {
const result = toggleCityPreference('like', 'like');
expect(result).toBeNull();
});
test('좋아요에서 싫어요로 변경 (like → dislike)', () => {
const result = toggleCityPreference('like', 'dislike');
expect(result).toBe('dislike');
});
});
핵심 체크포인트
- [ ] 유닛 테스트가 "작은 단위별, 독립적으로" 작성됨을 이해했는가?
- [ ] 서브에이전트 병렬 활용의 장점(시간 절약)과 주의점(충돌 가능성)을 이해했는가?
- [ ] Mock(모킹)이 왜 필요한지 설명할 수 있는가?
- [ ] 병렬 실행 시 Agent 4(인프라)를 먼저 완료한 후 나머지를 병렬로 진행하는 이유를 아는가?
4. E2E 테스트 계획하기
한 줄 요약
유닛 테스트가 최소한의 품질 보장이라면, E2E 테스트는 사용자가 주도하여 실제 브라우저에서 사용자 시나리오를 검증하는 테스트이다.
쉬운 설명 (비유)
비유: 자동차 검사
유닛 테스트 = 엔진, 브레이크, 타이어를 각각 따로 검사
→ "부품별로는 괜찮은데, 조립하면 문제 없나?"
통합 테스트 = 엔진+브레이크+타이어를 함께 검사
→ "부품 간 연결이 잘 되나?"
E2E 테스트 = 실제로 도로에서 운전해보기
→ "사용자가 시동 걸고 → 출발하고 → 브레이크 밟고 → 주차하는 전체 과정"
유닛 테스트 vs E2E 테스트
| 비교 항목 | 유닛 테스트 | E2E 테스트 |
|---|---|---|
| 테스트 대상 | 함수/모듈 단위 | 전체 사용자 시나리오 |
| 실행 환경 | Node.js (가상) | 실제 브라우저 |
| 속도 | 빠름 | 느림 |
| 작성 주체 | 클로드 코드가 자동화 | 사용자가 명시적으로 주도 |
| 실패 시 | 코드 단위에서 원인 파악 | 스크린샷, 동영상까지 제공 |
| 도구 | Jest | Playwright |
Playwright E2E 테스트 구조
tests/ # E2E 테스트 루트 디렉토리
├── auth/ # 인증 관련 테스트
│ ├── login.spec.ts
│ ├── register.spec.ts
│ └── logout.spec.ts
├── cities/ # 도시 관련 테스트
│ ├── city-filtering.spec.ts
│ ├── city-preferences.spec.ts
│ └── city-navigation.spec.ts
├── core/ # 핵심 기능 테스트
│ ├── homepage.spec.ts
│ ├── navigation.spec.ts
│ └── responsive.spec.ts
├── fixtures/ # 테스트 데이터 및 설정
│ ├── test-data.ts
│ ├── mock-cities.ts
│ └── user-accounts.ts
├── page-objects/ # Page Object Model 클래스
│ ├── base-page.ts
│ ├── login-page.ts
│ ├── home-page.ts
│ └── city-card.ts
└── utils/ # 테스트 유틸리티
├── auth-helpers.ts
├── database-helpers.ts
└── screenshot-helpers.ts
playwright.config.ts # Playwright 설정
핵심 체크포인트
- [ ] 유닛 테스트 → 통합 테스트 → E2E 테스트의 계층 구조를 이해했는가?
- [ ] E2E 테스트를 "사용자가 주도"해야 하는 이유를 설명할 수 있는가?
- [ ] Page Object Model 패턴의 목적을 이해했는가?
- [ ] fixtures/와 page-objects/ 폴더의 역할을 구분할 수 있는가?
5. E2E 테스트 작성하기 (Playwright + MCP)
한 줄 요약
Playwright MCP를 등록하고 커스텀 커맨드를 만들면, 자연어로 테스트할 요소를 입력해도 Playwright API로 변환하여 E2E 테스트 코드를 자동 생성할 수 있다.
쉬운 설명 (비유)
비유: 레스토랑 주문
❌ 직접 요리: Playwright API를 일일이 손으로 작성
→ page.goto(), page.getByRole(), expect().toBeVisible() ...
✅ 주문만 하기: 자연어로 "이거 테스트해줘"
→ 클로드 코드 + Playwright MCP가 자동으로 테스트 코드 작성
→ 실제 브라우저에서 실행까지 해줌
단계별 E2E 테스트 세팅
단계 01: Playwright 구조 구상 및 세팅
프롬프트:
"E2E 테스트를 Playwright를 사용해서 구현할 건데
폴더 구조를 어떻게 하면 좋을지 구상해줘. 아직 테스트를 작성하지는 말아줘."
→ 구조 확인 후:
"계획대로 Playwright 테스트 구조를 만들기 위해 Playwright 세팅을 해주고
테스트 폴더 구조를 구현해줘. 아직 테스트는 작성하지 말아줘."
완료된 작업:
- @playwright/test 패키지 설치
- playwright.config.ts 설정 파일 생성
- tests/ 폴더 구조 생성 (auth/, cities/, core/, fixtures/, page-objects/, utils/)
- package.json에 E2E 테스트 스크립트 5개 추가
- fixtures, utils, page-objects 기본 파일 생성
단계 02: CLAUDE.md에 E2E 테스트 구조 등록
프롬프트:
"CLAUDE.md 파일에 E2E 테스트 구조에 대한 설명을 작성해줘."
→ 이후 클로드 코드가 테스트 코드를 생성할 때마다 참조할 수 있게 됨
단계 03: Playwright MCP 등록
# 터미널에서 실행
claude mcp add playwright -s project npx @playwright/mcp@latest
등록 결과 (.mcp.json):
{
"mcpServers": {
"playwright": {
"type": "stdio",
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {}
}
}
}
단계 04: 커스텀 커맨드로 E2E 테스트 자동 생성
# 파일: .claude/commands/create-e2e-test.md
# E2E 테스트 생성기
너는 지금부터 Playwright로 E2E 테스트를 생성하는 QA 전문가야.
## 테스트 방식
- $ARGUMENT로 입력한 테스트 요소들을 잘 이해해줘.
- Playwright MCP를 사용해서 테스트를 진행해줘.
- 테스트가 전부 끝나면 E2E 테스트를 작성해줘.
- 작성한 테스트들을 전부 실행해주고 실패하는 테스트가 있다면 성공할 때까지 개선해줘.
단계 05: 커스텀 커맨드 실행
/create-e2e-test
- http://localhost:3000으로 이동해줘
- 홈페이지에 로고가 존재하는 걸 확인해줘
- 홈페이지에 도시 카드들이 존재하는 걸 확인해줘
- 홈페이지에 처음 접속하면 필터가 적용 안 돼 있는걸 확인해줘
- 홈페이지의 필터가 적용 안 돼 있으면 데이터베이스에 저장된 도시들이
전부 도시 카드로 나열 돼 있는 걸 확인해줘.
실무 예제: Playwright E2E 테스트 코드
test.describe('K-NOMAD 홈페이지 기본 기능 테스트', () => {
test.beforeEach(async ({ page }) => {
// 각 테스트 전에 홈페이지로 이동
await page.goto('http://localhost:3000');
});
test('홈페이지에 로고가 존재하는지 확인', async ({ page }) => {
// 헤더의 K-NOMAD HUB 로고 확인
const headerLogo = page.getByRole('link', { name: 'K-NOMAD HUB' });
await expect(headerLogo).toBeVisible();
// 로고가 클릭 가능한지 확인
await expect(headerLogo).toHaveAttribute('href', '/');
});
// ...생략...
});
테스트 실행 및 결과 확인
# 모든 테스트 실행 (모든 브라우저)
npx playwright test
# 마지막 테스트 결과 리포트 열기
npx playwright show-report
Playwright는 실제 브라우저(Chromium, Firefox)를 사용하여 테스트하므로, 실패 시 스크린샷과 동영상까지 제공한다. 유닛 테스트보다 개발자가 더 직관적으로 테스트 결과를 확인할 수 있다.
핵심 체크포인트
- [ ] Playwright MCP를 등록하는 명령어(
claude mcp add)를 알고 있는가? - [ ] 커스텀 커맨드(.claude/commands/)로 E2E 테스트 생성을 자동화하는 방법을 이해했는가?
- [ ]
npx playwright test와npx playwright show-report명령어의 차이를 아는가? - [ ] Playwright가 실패 시 스크린샷/동영상을 제공하는 장점을 설명할 수 있는가?
연습문제
문제 1 (기본)
유닛 테스트, 통합 테스트, E2E 테스트의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 적합한지 예시를 들어 설명하시오.
정답 보기
- **유닛 테스트**: 가장 작은 단위(함수/모듈)를 독립적으로 검증. 예) `toggleCityPreference()` 함수가 null에서 like로 올바르게 변경되는지 검증 - **통합 테스트**: 여러 유닛들의 통합이 올바르게 동작하는지 검증. 예) Supabase DB와 localStorage fallback이 함께 동작하는지 검증 - **E2E 테스트**: 사용자의 실제 상호작용 시나리오를 브라우저에서 검증. 예) 사용자가 홈페이지 접속 → 필터 선택 → 도시 카드 확인하는 전체 흐름문제 2 (중급)
클로드 코드의 서브에이전트를 활용하여 테스트 코드를 병렬로 작성할 때, Agent 4(Infrastructure Specialist)를 먼저 완료한 후 나머지를 병렬로 진행해야 하는 이유를 설명하시오.
정답 보기
Agent 4는 테스트 환경 설정(jest.config.js, jest.setup.js)과 Mock 시스템(__mocks__/ 폴더)을 담당한다. 다른 Agent들이 작성하는 테스트 코드는 이 인프라에 의존하기 때문에, Mock 객체나 테스트 설정이 없으면 테스트가 실행되지 않는다. 따라서 Agent 4(인프라) → Agent 1~3(병렬)의 순서가 필요하다. 이 전략으로 순차 개발(9~13시간) 대비 병렬 개발(3~4시간)로 65~70%의 시간을 절약할 수 있다.문제 3 (심화)
Playwright MCP를 활용한 E2E 테스트 자동화 워크플로우를 처음부터 끝까지 설계하시오. 필요한 파일, 설정, 커맨드를 모두 포함하시오.
정답 보기
1. **구조 구상**: 클로드 코드에게 E2E 테스트 폴더 구조 구상 요청 (tests/ 하위에 auth/, cities/, core/, fixtures/, page-objects/, utils/ 구성) 2. **Playwright 세팅**: `@playwright/test` 설치, `playwright.config.ts` 생성, `package.json`에 스크립트 추가 3. **CLAUDE.md 등록**: 테스트 구조를 CLAUDE.md에 기록하여 클로드 코드가 참조 4. **Playwright MCP 등록**: `claude mcp add playwright -s project npx @playwright/mcp@latest` 5. **커스텀 커맨드 생성**: `.claude/commands/create-e2e-test.md` 파일 생성, $ARGUMENT로 테스트 요소 입력, Playwright MCP 사용하여 테스트 진행, 실패 시 자동 개선 6. **테스트 실행**: `/create-e2e-test` 명령으로 자연어 입력 → Playwright API 자동 변환 → 테스트 코드 생성 7. **결과 확인**: `npx playwright test` 실행 후 `npx playwright show-report`로 리포트 확인 (Chromium, Firefox 등 멀티 브라우저)부록 A — 용어 사전
| 용어 | 설명 |
|---|---|
| 유닛 테스트 | 함수/모듈 단위의 가장 작은 비즈니스 로직을 독립적으로 검증하는 테스트 |
| E2E 테스트 | End-to-End 테스트. 사용자 시나리오를 실제 브라우저에서 처음부터 끝까지 검증 |
| 통합 테스트 | 여러 유닛의 통합이 올바르게 동작하는지 검증하는 테스트 |
| Jest | JavaScript/TypeScript 유닛 테스트 프레임워크. describe/test/expect 패턴 사용 |
| Playwright | MS가 관리하는 E2E 테스트 도구. 실제 브라우저(Chromium, Firefox, WebKit)에서 테스트 |
| Mock(모킹) | 외부 의존성을 가짜 객체로 대체하여 테스트를 독립적으로 실행하는 기법 |
| 테스트 스위트 | 관련된 테스트 케이스를 그룹화한 단위. Jest에서 describe() 블록에 해당 |
| 테스트 케이스 | 하나의 특정 시나리오를 검증하는 개별 테스트. Jest에서 test() 또는 it()에 해당 |
| Page Object Model | E2E 테스트에서 페이지 요소와 동작을 클래스로 캡슐화하는 디자인 패턴 |
| Playwright MCP | Playwright를 클로드 코드의 MCP 서버로 등록하여 E2E 테스트를 자동화하는 도구 |
| Fixture | 테스트 실행에 필요한 사전 데이터나 설정을 제공하는 고정 데이터 |
| Fallback | 주 시스템(예: DB)이 실패했을 때 대안 시스템(예: localStorage)으로 전환하는 메커니즘 |
| 커스텀 커맨드 | .claude/commands/ 폴더에 .md 파일로 만드는 재사용 가능한 명령어 |
부록 B — 비교표
테스트 유형 비교
| 항목 | 유닛 테스트 | 통합 테스트 | E2E 테스트 |
|---|---|---|---|
| 테스트 범위 | 함수/모듈 | 모듈 간 연동 | 전체 사용자 시나리오 |
| 속도 | 빠름 (ms 단위) | 중간 | 느림 (초 단위) |
| 도구 | Jest | Jest + Mock | Playwright |
| 실행 환경 | Node.js | Node.js | 실제 브라우저 |
| 작성 주체 | 클로드 코드 자동화 | 혼합 | 사용자 주도 |
| 실패 시 정보 | 함수 단위 오류 | 연동 오류 | 스크린샷+동영상 |
| 비유 | 부품 개별 검사 | 조립 후 검사 | 실제 도로 주행 |
서브에이전트 역할별 비교
| Agent | 담당 영역 | 파일 수 | 테스트 케이스 | 예상 시간 |
|---|---|---|---|---|
| Agent 1 | 핵심 비즈니스 로직 | 3개 | ~45개 | 4~5시간 |
| Agent 2 | React 컴포넌트 | 3개 | ~28개 | 3~4시간 |
| Agent 3 | Hooks & Auth | 3개 | ~18개 | 2~3시간 |
| Agent 4 | 인프라/Mock | 5개 | - | 1~2시간 |
순차 개발 vs 병렬 개발
| 항목 | 순차 개발 | 병렬 개발 |
|---|---|---|
| 소요 시간 | 9~13시간 | 3~4시간 |
| 시간 절약 | - | 5~9시간 (65~70%) |
| 충돌 위험 | 없음 | 파일 충돌 가능 |
| 에이전트 수 | 1개 | 3~4개 |
부록 C — 참고 자료
| 자료 | 설명 | URL |
|---|---|---|
| Jest 공식 문서 | JavaScript 테스트 프레임워크 | https://jestjs.io/ |
| Playwright 공식 문서 | E2E 테스트 도구 | https://playwright.dev/ |
| React Testing Library | React 컴포넌트 테스트 | https://testing-library.com/react |
| Playwright MCP | 클로드 코드 E2E 자동화 | https://github.com/playwright-community/mcp |
| 책 유튜브 보충 강의 | 20장 관련 영상 | https://bit.ly/3lWFmjH |
| 코드팩토리 GitHub | 예제 코드 저장소 | https://github.com/codefactory-co |
클릭하거나 Space를 눌러 뒤집기